package com.zjsru.oneDay;

/**
 * 3335. 字符串转换后的长度 I
 * @Author: cookLee
 * @Date: 2025-05-13 
 */
public class LengthAfterTransformations {

    /**
     * 主
     * \
     * 如果字符是 'z'，则将其替换为字符串 "ab"。
     * 否则，将其替换为字母表中的下一个字符。例如，'a' 替换为 'b'，'b' 替换为 'c'，依此类推。
     * \
     * 输入： s = "abcyy", t = 2
     * 输出： 7
     * 解释：
     * 第一次转换 (t = 1)
     * 'a' 变为 'b'
     * 'b' 变为 'c'
     * 'c' 变为 'd'
     * 'y' 变为 'z'
     * 'y' 变为 'z'
     * 第一次转换后的字符串为："bcdzz"
     * 第二次转换 (t = 2)
     * 'b' 变为 'c'
     * 'c' 变为 'd'
     * 'd' 变为 'e'
     * 'z' 变为 "ab"
     * 'z' 变为 "ab"
     * 第二次转换后的字符串为："cdeabab"
     * 最终字符串长度：字符串为 "cdeabab"，长度为 7 个字符。
     * \
     * @param args args
     */
    public static void main(String[] args) {
        LengthAfterTransformations lengthAfterTransformations = new LengthAfterTransformations();
        System.out.println(lengthAfterTransformations.lengthAfterTransformations("abcyy", 2));
    }

    private static final int MOD = 1000000007;

    public int lengthAfterTransformations(String s, int t) {
        int[] charArray = new int[26];
        for (int i = 0; i < s.length(); i++) {
            charArray[s.charAt(i) - 'a']++;
        }
        for (int i = 0; i < t; i++) {
            //临时数组，保存本轮变换结
            int[] inx = new int[26];
            //特殊处理a
            inx[0] = charArray[25];
            //特殊处理z-》ab,包含a和z的共同数量
            inx[1] = (charArray[25] + charArray[0]) % MOD;
            //将当前字符的数量转移到其下一个字符的位置上。因为下一字符的变换数量由上一次字符决定
            for (int j = 2; j < 26; j++) {
                inx[j] = charArray[j - 1];
            }
            charArray = inx;
        }
        int ans = 0;
        for (int j : charArray) {
            ans = (ans + j) % MOD;
        }
        return ans;
    }

}
